package 职责链模式;

//职责链将请求的发送者和请求的处理者解耦了，这就是职责链的设计动机。
//避免请求发送者与接收者耦合在一起，让多个对象都有可能接收请求，将这些对象连接成一条链，并且沿着这条链传递请求，直到有对象处理它为止，这就是职责链模式。

//我们将使用开头那个请假的实例。请假：3天以下辅导员签字、3到5天系主任签字、6到10天院长签字、11-15天校长签字、15天以上不允签字。
public class MainClass {
	public static void main(String[] args) throws Exception {
		Leader instructor = new Instructor("陈毅"); // 辅导员
		Leader departmentHead = new DepartmentHead("王明"); // 系主任
		Leader dean = new Dean("张强"); // 院长
		Leader president = new President("王晗"); // 校长

		instructor.setSuccessor(departmentHead); // 辅导员的后续者是系主任
		departmentHead.setSuccessor(dean); // 系主任的后续者是院长
		dean.setSuccessor(president); // 院长的后续者是校长

		// 请假3天的请假条
		LeaveNode leaveNode1 = new LeaveNode("张三", 3);
		instructor.handleRequest(leaveNode1);

		// 请假9天的请假条
		LeaveNode leaveNode2 = new LeaveNode("李四", 9);
		instructor.handleRequest(leaveNode2);

		// 请假15天的请假条
		LeaveNode leaveNode3 = new LeaveNode("王五", 15);
		instructor.handleRequest(leaveNode3);

		// 请假20天的请假条
		LeaveNode leaveNode4 = new LeaveNode("赵六", 20);
		instructor.handleRequest(leaveNode4);
	}
}
